#ifndef INTERFACE_H
#define INTERFACE_H

#include <SDL.h>
#include <SDL/SDL_ttf.h>
#include "lecture.h"
#include "paint.h"
#include "dim.h"

    /*Fonction crée par Valentin :
        Test si les coordonnées données correspondent à un carré d'une liste de carrée donnée */
    int selection_carre(int abscisse,int ordonner,int x, int y, list_carre * lc);

    /*Fonction crée par Valentin :
        Test lors d'un clic de souris quel objet est visé (boutons/pièces) et appelle d'autres fonctions en conséquences */
    void selection(int x, int y, SDL_Surface * screen) ;


    /*Fonction crée par Valentin :
        Donne l'ordonnée pour qu'une pièce soit alignée avec le plateau*/
    int ordo_sur_plateau() ;


    /*Fonction crée par Valentin :
        Donne l'ordonnée pour qu'une pièce soit alignée avec le plateau*/
    int absci_sur_plateau() ;


    /*Fonction crée par Valentin :
        Test si le curseur est positionné sur le plateau */
    int curseur_sur_plateau(int x,int y) ;


    /*Fonction crée par Valentin :
        Test si la pièce selectionnée peut être lachée */
    int pouvoir_lacher() ;


    /*Fonction crée par Valentin :
        Test si la pièce selectionnée peut être posée sur le plateau avec ses coordonnées actuelles */
    int accepter_sur_plateau() ;


    /*Fonction crée par Valentin :
        Crée une fausse image qui symbolise la pièce si elle était posée sur le plateau avec ses coordonnées actuelles */
    void eclaire_case() ;

    /*Fonction cree par Thibault :
        Test si la liste de pièces est vide ou si le plateau est remplie et renvoie 1 si c'est le cas */
    int OnAGagner() ;

    /*Fonction cree par Thibault :
        Fonction qui gère tout les évènements en jeu */
    void HandleEventInGame(SDL_Event event, SDL_Surface * screen) ;

    /*Fonction cree par Thibault :
        Fonction qui met à jour le chrono */
    int timer (char char_final[5]) ;

    /*Fonction cree par Thibault :
        Fonction qui construit un tableau correspondant au plateau de jeu avec toutes les cases à 0*/
    void construire_tableau() ;

    /* Fonction crée par Thibault :
        Fonction qui met les cases du tableau à 1 là où la pièce selectionnée à été mise sur le plateau */
    void mettre_piece_tableau(int abscisse, int ordonner) ;

    /* Fonction crée par Thibault :
        Fonction qui remet les cases du tableau à 0 là où la pièce selectionnée à été enlevée sur le plateau */
    void enlever_piece_tableau (int abscisse, int ordonner) ;

    /* Fonction crée par Thibault :
        Dérivé du accepter_sur_plateau modifié pour correspondre à la résolution du pentomino */
    int accepter_sur_plateau_IA(int abscisse_IA, int ordonner_IA, int * decal_absci_IA) ;

    /*Fonction cree par Thibault :
        Fonction qui teste toutes les possibilités jusqu'à arriver à une solution du pentomino */
    int IA_Auxiliaire (int abscisse, int ordonner) ;

    /*Fonction cree par Thibault :
        Fonction qui initialise le calcul de la solution */
    int IA () ;

    /*Fonction cree par Thibault :
        Fonction principale qui gère tout le processus de jeu */
    int JouerPentomino(SDL_Surface * screen, char * niveau);

#endif
